// 自定义道路--应用于primitive的appearance的material
uniform vec4 color;
uniform float glowPower;
uniform float taperPower;

// materilInput是由Appearance提供的，不同的Appearance提供的input数据都不一样
czm_material czm_getMaterial(czm_materialInput materialInput){
    // 一般先通过输入值，mateiralInput生成返回的具体材质对象 material
    // material中包含diffuse漫反射颜色，alpha透明度，emssion自发光颜色等等
    czm_material material = czm_getDefaultMaterial(materialInput);

    float iTime=czm_frameNumber/120.;
    iTime=fract(iTime);
    // -----------------------从cesium源码中摘抄的部分
    // 获取当前材质的uv坐标，获取这个变量之前，先检查一下appearance中是否有传入这个st数据
    vec2 st=materialInput.st;

    // 添加从cesium源码中得到的高光线特效
    float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5);

    if (taperPower <= 0.99999) {
        glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5));
    }

    vec4 fragColor;
    fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb);
    fragColor.a = clamp(0.0, 1.0, glow) * color.a;
    fragColor = czm_gammaCorrect(fragColor);

    material.emission = fragColor.rgb*0.3;
    // --------------------------------自己编写流动的逻辑---------------------
    material.diffuse=color.rgb;
    float alpha=fragColor.a*0.3;
    // 如果是在线段的中心的片元，加上高亮
    if(st.s>iTime && st.s<(iTime+0.03)){
        // 可以修改透明度为smoothStep，这样光点会有一个拖尾的效果
        alpha=smoothstep(iTime, iTime+0.03, st.s);
        material.diffuse*=6.;
        material.emission*=6.;
    }
    material.alpha=alpha;

    return material;
}